#include<iostream>
#include<unistd.h>
#include<signal.h>
#include<stdint.h>
#include<functional>
#include<vector>
#include<sys/types.h>
#include<sys/wait.h>

using namespace std;

typedef function<void()>func;
vector<func>callbacks;

uint64_t count=0;

void showCount()
{
    cout<<"final count:"<<count<<endl;
}
void showLog()
{
    cout<<"这是个日志功能"<<endl;
}
void logUser()
{
    if(fork()==0)
    {
        execl("/usr/bin/who","who",nullptr);
        exit(1);
    }
    wait(nullptr);
}
//定时器功能
void catchSig(int signum)
{
    for(auto & f:callbacks)
    {
        f();
    }
    //结束了再设置一个闹钟
    alarm(1);
}

int main()
{
    //验证1s内，我们会进行多少次count++
    //为什么我们计算不到10w+?因为有cout（到外设）+网络发送（xshell和远端云服务器）=IO
    alarm(1);//设定了一个闹钟，这个闹钟一旦触发，就自动移除了。
    signal(SIGALRM,catchSig);
    
    callbacks.push_back(showCount);
    callbacks.push_back(showLog);
    callbacks.push_back(logUser);
    
    while(true)count++;
    return 0;
}